{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "01_Keras_stateful_RNN_playground.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RH-br21Mfg83",
        "colab_type": "text"
      },
      "source": [
        "# An stateful RNN model to generate sequences\n",
        "RNN models can generate long sequences based on past data. This can be used to predict stock markets, temperatures, traffic or sales data based on past patterns. They can also be adapted to [generate text](https://docs.google.com/presentation/d/18MiZndRCOxB7g-TcCl2EZOElS5udVaCuxnGznLnmOlE/pub?slide=id.g139650d17f_0_1185). The quality of the prediction will depend on training data, network architecture, hyperparameters, the distance in time at which you are predicting and so on. But most importantly, it will depend on wether your training data contains examples of the behaviour patterns you are trying to predict."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9l96vOsPfg84",
        "colab_type": "code",
        "outputId": "acdf8c9b-9de8-4926-db0e-dcea670d5080",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "# using Tensorflow 2\n",
        "%tensorflow_version 2.x\n",
        "import math\n",
        "import numpy as np\n",
        "from matplotlib import pyplot as plt\n",
        "import tensorflow as tf\n",
        "print(\"Tensorflow version: \" + tf.__version__)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Tensorflow version: 2.0.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gxJ60M-4ilJy",
        "colab_type": "code",
        "cellView": "form",
        "colab": {}
      },
      "source": [
        "#@title Data formatting and display utilites [RUN ME]\n",
        "\n",
        "def dumb_minibatch_sequencer(data, batch_size, sequence_size, nb_epochs):\n",
        "    \"\"\"\n",
        "    Divides the data into batches of sequences in the simplest way: sequentially.\n",
        "    :param data: the training sequence\n",
        "    :param batch_size: the size of a training minibatch\n",
        "    :param sequence_size: the unroll size of the RNN\n",
        "    :param nb_epochs: number of epochs to train on\n",
        "    :return:\n",
        "        x: one batch of training sequences\n",
        "        y: one batch of target sequences, i.e. training sequences shifted by 1\n",
        "    \"\"\"\n",
        "    data_len = data.shape[0]\n",
        "    nb_batches = data_len // (batch_size * sequence_size)\n",
        "    rounded_size = nb_batches * batch_size * sequence_size\n",
        "    xdata = data[:rounded_size]\n",
        "    ydata = np.roll(data, -1)[:rounded_size]\n",
        "    xdata = np.reshape(xdata, [nb_batches, batch_size, sequence_size])\n",
        "    ydata = np.reshape(ydata, [nb_batches, batch_size, sequence_size])\n",
        "\n",
        "    for epoch in range(nb_epochs):\n",
        "        for batch in range(nb_batches):\n",
        "            yield xdata[batch,:,:], ydata[batch,:,:]\n",
        "            \n",
        "            \n",
        "def rnn_minibatch_sequencer(data, batch_size, sequence_size, nb_epochs):\n",
        "    \"\"\"\n",
        "    Divides the data into batches of sequences so that all the sequences in one batch\n",
        "    continue in the next batch. This is a generator that will keep returning batches\n",
        "    until the input data has been seen nb_epochs times. Sequences are continued even\n",
        "    between epochs, apart from one, the one corresponding to the end of data.\n",
        "    The remainder at the end of data that does not fit in an full batch is ignored.\n",
        "    :param data: the training sequence\n",
        "    :param batch_size: the size of a training minibatch\n",
        "    :param sequence_size: the unroll size of the RNN\n",
        "    :param nb_epochs: number of epochs to train on\n",
        "    :return:\n",
        "        x: one batch of training sequences\n",
        "        y: one batch of target sequences, i.e. training sequences shifted by 1\n",
        "    \"\"\"\n",
        "    data_len = data.shape[0]\n",
        "    # using (data_len-1) because we must provide for the sequence shifted by 1 too\n",
        "    nb_batches = (data_len - 1) // (batch_size * sequence_size)\n",
        "    assert nb_batches > 0, \"Not enough data, even for a single batch. Try using a smaller batch_size.\"\n",
        "    rounded_data_len = nb_batches * batch_size * sequence_size\n",
        "    xdata = np.reshape(data[0:rounded_data_len], [batch_size, nb_batches * sequence_size])\n",
        "    ydata = np.reshape(data[1:rounded_data_len + 1], [batch_size, nb_batches * sequence_size])\n",
        "\n",
        "    whole_epochs = math.floor(nb_epochs)\n",
        "    frac_epoch = nb_epochs - whole_epochs\n",
        "    last_nb_batch = math.floor(frac_epoch * nb_batches)\n",
        "    \n",
        "    for epoch in range(whole_epochs+1):\n",
        "        for batch in range(nb_batches if epoch < whole_epochs else last_nb_batch):\n",
        "            x = xdata[:, batch * sequence_size:(batch + 1) * sequence_size]\n",
        "            y = ydata[:, batch * sequence_size:(batch + 1) * sequence_size]\n",
        "            x = np.roll(x, -epoch, axis=0)  # to continue the sequence from epoch to epoch (do not reset rnn state!)\n",
        "            y = np.roll(y, -epoch, axis=0)\n",
        "            yield x, y\n",
        "            \n",
        "\n",
        "plt.rcParams['figure.figsize']=(16.8,6.0)\n",
        "plt.rcParams['axes.grid']=True\n",
        "plt.rcParams['axes.linewidth']=0\n",
        "plt.rcParams['grid.color']='#DDDDDD'\n",
        "plt.rcParams['axes.facecolor']='white'\n",
        "plt.rcParams['xtick.major.size']=0\n",
        "plt.rcParams['ytick.major.size']=0\n",
        "plt.rcParams['axes.titlesize']=15.0\n",
        "\n",
        "\n",
        "def display_lr(lr_schedule, nb_epochs):\n",
        "  x = np.arange(nb_epochs)\n",
        "  y = [lr_schedule(i) for i in x]\n",
        "  plt.figure(figsize=(9,5))\n",
        "  plt.plot(x,y)\n",
        "  plt.title(\"Learning rate schedule\\nmax={:.2e}, min={:.2e}\".format(np.max(y), np.min(y)),\n",
        "            y=0.85)\n",
        "  plt.show()\n",
        "  \n",
        "def display_loss(history, full_history, nb_epochs):\n",
        "  plt.figure()\n",
        "  plt.plot(np.arange(0, len(full_history['loss']))/steps_per_epoch, full_history['loss'], label='detailed loss')\n",
        "  plt.plot(np.arange(1, nb_epochs+1), history['loss'], color='red', linewidth=3, label='average loss per epoch')\n",
        "  plt.ylim(0,3*max(history['loss'][1:]))\n",
        "  plt.xlabel('EPOCH')\n",
        "  plt.ylabel('LOSS')\n",
        "  plt.xlim(0, nb_epochs+0.5)\n",
        "  plt.legend()\n",
        "  for epoch in range(nb_epochs//2+1):\n",
        "    plt.gca().axvspan(2*epoch, 2*epoch+1, alpha=0.05, color='grey')\n",
        "  plt.show()\n",
        "\n",
        "def picture_this_7(features):\n",
        "    subplot = 231\n",
        "    for i in range(6):\n",
        "        plt.subplot(subplot)\n",
        "        plt.plot(features[i])\n",
        "        subplot += 1\n",
        "    plt.show()\n",
        "    \n",
        "def picture_this_8(data, prime_data, results, offset, primelen, runlen, rmselen):\n",
        "    disp_data = data[offset:offset+primelen+runlen]\n",
        "    colors = plt.rcParams['axes.prop_cycle'].by_key()['color']\n",
        "    plt.subplot(211)\n",
        "    plt.xlim(0, disp_data.shape[0])\n",
        "    plt.text(primelen,2.5,\"DATA |\", color=colors[1], horizontalalignment=\"right\")\n",
        "    plt.text(primelen,2.5,\"| PREDICTED\", color=colors[0], horizontalalignment=\"left\")\n",
        "    displayresults = np.ma.array(np.concatenate((np.zeros([primelen]), results)))\n",
        "    displayresults = np.ma.masked_where(displayresults == 0, displayresults)\n",
        "    plt.plot(displayresults)\n",
        "    displaydata = np.ma.array(np.concatenate((prime_data, np.zeros([runlen]))))\n",
        "    displaydata = np.ma.masked_where(displaydata == 0, displaydata)\n",
        "    plt.plot(displaydata)\n",
        "    plt.subplot(212)\n",
        "    plt.xlim(0, disp_data.shape[0])\n",
        "    plt.text(primelen,2.5,\"DATA |\", color=colors[1], horizontalalignment=\"right\")\n",
        "    plt.text(primelen,2.5,\"| +PREDICTED\", color=colors[0], horizontalalignment=\"left\")\n",
        "    plt.plot(displayresults)\n",
        "    plt.plot(disp_data)\n",
        "    plt.axvspan(primelen, primelen+rmselen, color='grey', alpha=0.1, ymin=0.05, ymax=0.95)\n",
        "    plt.show()\n",
        "\n",
        "    rmse = math.sqrt(np.mean((data[offset+primelen:offset+primelen+rmselen] - results[:rmselen])**2))\n",
        "    print(\"RMSE on {} predictions (shaded area): {}\".format(rmselen, rmse))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ouNkUJLBfg89",
        "colab_type": "text"
      },
      "source": [
        "## Generate fake dataset [WORK REQUIRED]\n",
        " * Pick a wavewform below: 0, 1 or 2. This will be your dataset."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QLTqiqjSfg8-",
        "colab_type": "code",
        "outputId": "9a3fa26d-5d96-422d-e8cc-31d250f7e627",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 373
        }
      },
      "source": [
        "WAVEFORM_SELECT = 0 # select 0, 1 or 2\n",
        "\n",
        "def create_time_series(datalen):\n",
        "    # good waveforms\n",
        "    frequencies = [(0.2, 0.15), (0.35, 0.3), (0.6, 0.55)]\n",
        "    freq1, freq2 = frequencies[WAVEFORM_SELECT]\n",
        "    noise = [np.random.random()*0.1 for i in range(datalen)]\n",
        "    x1 = np.sin(np.arange(0,datalen) * freq1)  + noise\n",
        "    x2 = np.sin(np.arange(0,datalen) * freq2)  + noise\n",
        "    x = x1 + x2\n",
        "    return x.astype(np.float32)\n",
        "\n",
        "DATA_LEN = 1024*128+1\n",
        "data = create_time_series(DATA_LEN)\n",
        "plt.plot(data[:512])\n",
        "plt.show()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\ngg==\n",
            "text/plain": [
              "<Figure size 1209.6x432 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YyjwHUwZfg9B",
        "colab_type": "text"
      },
      "source": [
        "## Hyperparameters"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-gp8Qw-6fg9C",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "RNN_CELLSIZE = 80 # size of the RNN cells\n",
        "SEQLEN = 32       # unrolled sequence length\n",
        "BATCHSIZE = 30    # mini-batch size\n",
        "DROPOUT = 0.3     # dropout regularization: probability of neurons being dropped. Should be between 0 and 0.5"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WbsuSalyfg9E",
        "colab_type": "text"
      },
      "source": [
        "## Visualize training sequences\n",
        "This is what the neural network will see during training."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kYk8zx6jfg9F",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# The function dumb_minibatch_sequencer splits the data into batches of sequences sequentially.\n",
        "for features, labels in dumb_minibatch_sequencer(data, BATCHSIZE, SEQLEN, nb_epochs=1):\n",
        "    break\n",
        "print(\"Features shape: \" + str(features.shape))\n",
        "print(\"Labels shape: \" + str(labels.shape))\n",
        "print(\"Excerpt from first batch:\")\n",
        "\n",
        "picture_this_7(features)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "8PB4I6Qafg9H",
        "colab_type": "text"
      },
      "source": [
        "## The model [WORK REQUIRED]\n",
        "This time we want to train a \"stateful\" RNN model, one that runs like a state machine with an internal state updated every time an input is processed. Stateful models are typically trained (unrolled) to predict the next element in a sequence, then used in a loop (without unrolling) to generate a sequence.\n",
        "\n",
        "1. This model needs more compute power. Let's use GPU acceleration.<br/>\n",
        "Go to Runtime > Runtime Type and check that \"GPU\" is selected.\n",
        "1. Locate the inference function keras_prediction_run() below and check that at its core, it runs the model in a loop, piping outputs into inputs and output state into input state:<br/>\n",
        "```\n",
        "for i in range(n):\n",
        "    Yout = model.predict(Yout)\n",
        "```\n",
        "Notice that the output is passed around in the input explicitly. In Keras, the output state is passed around as the next input state automatically if RNN layers are declared with stateful=True\n",
        "1. Run the whole notebook as it is, with a dummy model that always predicts 1. Check that everything \"works\".\n",
        "1. Now implement a one layer RNN model:\n",
        " * Use stateful GRU cells [`tf.keras.layers.GRU(RNN_CELLSIZE, stateful=True, return_sequences=True)`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/GRU).\n",
        " * Make sure they all return full sequences with  [`return_sequences=True`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/GRU). The model should output a full sequence of length SEQLEN. The target is the input sequence shifted by one, effectively teaching the RNN to predict the next element of a sequence.\n",
        " * Do not forget to replicate the regression redout layer across all time steps with [`tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(1))`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/TimeDistributed)\n",
        " * In Keras, stateful RNNs must be defined for a fixed batch size ([documentation](https://keras.io/getting-started/faq/#how-can-i-use-stateful-rnns)). On the first layer, in addition to input_shape, please specify batch_size=batchsize\n",
        " * Adjust shapes as needed with  [`Reshape`](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Reshape) layers. Pen, paper and fresh brain cells <font size=\"+2\">🤯</font> still useful to follow the shapes. The shapes of inputs (a.k.a. \"features\") and targets (a.k.a. \"labels\") are displayed in the cell above this text.\n",
        "1. Add a second RNN layer.\n",
        " * The predictions might be starting to look good but the loss curve is pretty noisy.\n",
        "1. If we want to do stateful RNNs \"by the book\", training data should be arranged in batches in a special way so that RNN states after one batch are the correct input states for the sequences in the next batch (see [this illustration](https://docs.google.com/presentation/d/18MiZndRCOxB7g-TcCl2EZOElS5udVaCuxnGznLnmOlE/edit#slide=id.g139650d17f_0_584)). Correct data batching is already implemented: just use the rnn_minibatch_sequencer function in the training loop instead of dumb_minibatch_sequencer.\n",
        " * This should clean up the loss curve and improve predictions.\n",
        "1. Finally, add a learning rate schedule. In Keras, this is also done through a callback. Edit lr_schedule below and swap the constant learning rate for a decaying one (just uncomment it).\n",
        " * Now the RNN should be able to continue your curve accurately.\n",
        "1. (Optional) To do things really \"by the book\", shouldn't states also be reset when sequences are no longer continuous between batches, i.e. at every epoch? The reset_state callback defined below does that. Add it to the list of callbacks in model.fit and test.\n",
        " * It actually makes things slightly worse... Looking at the loss should tell you why: a zero state generates a much bigger loss at the start of each epoch than the state from the previous epoch. Both are incorrect but one is much worse.\n",
        "1. (Optional) You can also add dropout regularization. Try dropout=DROPOUT on both your RNN layers.\n",
        " * Aaaarg 😫what happened ?\n",
        "1. (Optional) In Keras RNN layers, the dropout parameter is an input dropout. In the first RNN layer, you are dropping your input data ! That does not make sense. Remove the dropout from your first RNN layer. With dropout, you might need to train for longer. Try 10 epochs.\n",
        "\n",
        "\n",
        "![deep RNN schematic](https://googlecloudplatform.github.io/tensorflow-without-a-phd/docs/images/RNN1.svg)\n",
        "<div style=\"text-align: right; font-family: monospace\">\n",
        "  X shape [BATCHSIZE, SEQLEN, 1]<br/>\n",
        "  Y shape [BATCHSIZE, SEQLEN, 1]<br/>\n",
        "  H shape [BATCHSIZE, RNN_CELLSIZE*NLAYERS]\n",
        "</div>\n",
        "In Keras layers, the batch dimension is implicit ! For a shape of [BATCHSIZE, SEQLEN, 1], you write [SEQLEN, 1]. In pure Tensorflow however, this is NOT the case."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9ga_jncykosN",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def keras_model(batchsize, seqlen):\n",
        "\n",
        "  model = tf.keras.Sequential([\n",
        "      #\n",
        "      # YOUR MODEL HERE\n",
        "      # This is a dummy model that always predicts 1\n",
        "      #\n",
        "      tf.keras.layers.Lambda(lambda x: tf.ones([batchsize,seqlen]), input_shape=[seqlen,])\n",
        "  ])\n",
        "  \n",
        "  # to finalize the model, specify the loss, the optimizer and metrics\n",
        "  model.compile(\n",
        "     loss = 'mean_squared_error',\n",
        "     optimizer = 'adam',\n",
        "     metrics = ['RootMeanSquaredError'])\n",
        "  \n",
        "  return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8311WBkinlGp",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Keras model callbacks\n",
        "\n",
        "# This callback records a per-step loss history instead of the average loss per\n",
        "# epoch that Keras normally reports. It allows you to see more problems.\n",
        "class LossHistory(tf.keras.callbacks.Callback):\n",
        "  def on_train_begin(self, logs={}):\n",
        "      self.history = {'loss': []}\n",
        "  def on_batch_end(self, batch, logs={}):\n",
        "      self.history['loss'].append(logs.get('loss'))\n",
        "      \n",
        "# This callback resets the RNN state at each epoch\n",
        "class ResetStateCallback(tf.keras.callbacks.Callback):\n",
        "  def on_epoch_begin(self, batch, logs={}):\n",
        "      self.model.reset_states()\n",
        "      print('reset state')\n",
        "\n",
        "reset_state = ResetStateCallback()\n",
        "      \n",
        "# learning rate decay callback\n",
        "def lr_schedule(epoch): return 0.01\n",
        "#def lr_schedule(epoch): return 0.0001 + 0.01 * math.pow(0.65, epoch)\n",
        "lr_decay = tf.keras.callbacks.LearningRateScheduler(lr_schedule, verbose=True)\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "XlKtnYjbfg9V",
        "colab_type": "text"
      },
      "source": [
        "## The training loop"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Tcrj-e50yyuM",
        "colab_type": "code",
        "outputId": "50369ea8-0702-4757-bc07-418ee7e07398",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 486
        }
      },
      "source": [
        "# Execute this cell to reset the model\n",
        "\n",
        "NB_EPOCHS = 8\n",
        "model = keras_model(BATCHSIZE, SEQLEN)\n",
        "\n",
        "# this prints a description of the model\n",
        "model.summary()\n",
        "\n",
        "display_lr(lr_schedule, NB_EPOCHS)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"sequential\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "lambda (Lambda)              (30, 32)                  0         \n",
            "=================================================================\n",
            "Total params: 0\n",
            "Trainable params: 0\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nHdO2isRCgUWkhDfeeIOdO3fy2muvsWXLFlJTUyksLGTz5s1l+s6YMYPZs2dz2mmnMWLECHr37k1y\ncnJkelUdEio+f2HZsmWkpaVF2pctW0aDBg1o3LhxpF/pcw6+//57VqxYwY033giETpSsXr0677//\nPgkJCXzzzTc0bdo00r9Jkyb069ePRYsWRdqKT6I9+eSTWb16NTt27CAlJSVqHKXPsVi/fj29e/cm\nLS2NF198kWrVqh1UDapSVR0SiqWeKSkpnHDCCWXe19LnNTVo0IDOnTszfvz4MuupWbMmUHaPYPFJ\ntieffDJLly6Nmqf056bY+++/z8CBA7nxxhu58847D2i7RfZFgUWkhF27dpGQkBB1xcXLL78ctRsd\nQn+x3njjjdx888389re/pUOHDtx111089thjkT5VdUioVatWtGvXjldeeYXevXsDod37r7zyCn37\n9o3069u3L9OmTWPVqlWRYDNz5kz27NlDnz59gNBhlKKiIrZu3UqvXr3K/WbWhg0blrub/6KLLgJC\nQe7qq68GYO3atbz77rv8+c9/jvTbvn175Pb+s2fPjgp5R4KqOiQUaz379u3LjBkzuP/++yPB76WX\nXuKEE06gY8eOAPTo0YM333yTE088kSZNmpS7vpYtW5Z7U7tYPjcAS5cupV+/fvTp0+eQ37hOBGIM\nLGbWB3gEqAY87e4PlppeE3gOyAA2AT9295Vm1hCYDnQBJrv70BLzZACTgVrA68BtXmI/q5ndAYwF\nGrv7xgPeQpH9UPwL+9prr+VHP/oR69evZ+zYsWUOFdx0003UqVOH0aNHk5KSwhNPPMFPfvITLrvs\nssi5GPv6BVCRf/7zn2zYsIEPP/wQCF1S2rhxY9q3bx85n2LUqFGMGjUqKkTl5ORw9dVX07JlS849\n91ymTJnCF198wbRp0yJ9+vfvzwMPPMBll13G7373O7Zu3cqwYcP4yU9+EjkR86STTuLGG29k4MCB\njBgxgrS0NOrUqcPSpUtZvnx5hTcjS01N5frrr+f222/H3WncuDE5OTmkpaVFfuFC6DLdjz/+mMmT\nJ/Pll1/y5ZdfRqadddZZkefdu3cHOOg9UIdap06d9nue6dOnA6HzoHbu3Bl5nZmZGdkD1qNHD4DI\nHYpjreedd97J1KlT+elPf8rPf/5zFi1axIQJExg/fnzkkOM111zDk08+Sffu3Rk+fDitWrVi06ZN\nLFy4kGbNmjFs2LB9jr1///7k5ORU+LlZv349ffr0oXbt2tx6660sXLgwMn/dunUjn12Rg1LZjVoI\nhZQvgVZAIvAfoH2pPjcDT4afDwReCj9PAX4A3Ag8XmqehcBZgAFzgL4lpp0A/B1YBTQqZ1yHjW4M\ndHTUYNCgQZ6RkRHV9uyzzzrg3333XaTtq6++csBnzZoVaXvuuee8VatWXrNmTe/WrZvPnz/f09LS\n/I477nD3/95I6913341afv/+/T0tLc23bdt2wOPOzMx0oMxj5MiRkT4jR4700H/daE899ZS3bt3a\nExMT/YwzzvC5c+eW6bN69Wq/5JJLPCUlxRs0aOA333yz79ixI6rP3r17/eGHH/b27dt7YmKiN2rU\nyM8///yoG5jty+7du33YsGHeqFEjT05O9r59+0bdcMzdy92+4kdJXbp08QEDBlS4voN5nwF/7LHH\nIq8zMzP98ssvj1rWvHnzHPBPPvmk0m2vyL62d968eVHrz8zMjJovlnq6u7/77rvepUsXr1mzpqel\npfkjjzxSps+3337rt956q6empnqNGjW8RYsWnp2d7e+9916l41+4cGGFn5viOpX3KL1NR7Kj4Wfj\nwYrnjePMKzl5zMzOBnLcvXf49a/CQecPJfr8PdznAzOrDqwjtGfEw9MHA509vIfFzJoD89z95PDr\nK4Hu7n5D+PV04HfAa+H5Su9hqXjQB6G8XeDHGtUgRHWIXw327NlD3bp1efPNN8nMzKzy9Zekz4Fq\nUEx1OOw1qPAqhFhOZW8BlPwyiLxwW7l93L0Q2ApUdC1bi/ByyizTzC4B1rj7f2IYm4gchRYvXkyn\nTp3iHlZEJDgCddKtmSUDvwYuqqhffn7+IblDaHkKCgrIy8urvONRTDUIUR3iV4O0tDReffXVQNRf\nnwPVoJjqcHhrUNmem1gCyxpC55RElhluK69PXviQUD1CJ99WtMySIyteZmsgHfhP+GSxVOBfZtbV\n3SP3j27evHkMwz4w2uWnGhRTHVQDUA1ANSimOsS3BrEcEloEtDWzdDNLJHRSbenvgZ8JDAo/7w+8\n4xWcHOPu+cA2MzvLQsnkGuA1d//E3Zu4e0t3b0noUNGZJcOKiIiIHHsq3cPi7oVmNpTQVTvVgGfc\nfamZjQIWu/tMYBLwFzPLBTYTCjUAmNlKoC6QaGaXAhe5+6eEriyaTOiy5jnhh4iIiEgZMZ3D4u6v\nE7pXSsm2e0s83w0M2Me8LffRvhjoWMl6y51XREREji0H/4UXIiIiIoeZAouIiIgEngKLiIiIBJ4C\ni4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKL\niIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouI\niIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iI\niASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiI\nBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEXkyBxcz6mNnnZpZrZneXM72mmb0U\nnr7AzFqG2xua2Twz225mj5eaJ8PMPgnP86iZWbh9jJktM7OPzWyGmR138JspIiIiR7JKA4uZVQOe\nAPoC7YErzax9qW7XA1vcvQ3wMDA63L4buAcYXs6ixwM/B9qGH33C7W8BHd39VGA58Kv92SARERE5\n+sSyh6UrkOvuK9z9e+BF4JJSfS4BpoSfTwd6mJm5+w53f49QcIkws+ZAXXef7+4OPAdcCuDub7p7\nYbjrfCD1QDZMREREjh7VY+jTAlhd4nUe0G1ffdy90My2Ag2BjRUsM6/UMluU0+864KXSjfn5+RQV\nFcUw9P1XUFBAXl5e5R2PYqpBiOqgGoBqAKpBMdXh8NYgNbXi/ROxBJa4MLPfAIXA1NLTmjdvftjW\nm5eXV2nRjnaqQYjqoBqAagCqQTHVIb41iOWQ0BrghBKvU8Nt5fYxs+pAPWBTJcssucVRyzSzwcDF\nwFXhQ0YiIiJyDIslsCwC2ppZupklAgOBmaX6zAQGhZ/3B96pKGi4ez6wzczOCl8ddA3wGoSuSAJG\nAD9y9537tTUiIiJyVKr0kFD4nJShwN+BasAz7r7UzEYBi919JjAJ+IuZ5QKbCYUaAMxsJVAXSDSz\nS4GL3P1T4GZgMlALmBN+ADwO1ATeCl/pPN/dbzwE2yoiIiJHqJjOYXH314HXS7XdW+L5bmDAPuZt\nuY/2xUDHctrbxDImEREROXboTrciIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIi\nIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIi\nEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiIS\neAosIiIiEngKLCIiIhJ4Ciy/6+PnAAAOSUlEQVQiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAos\nIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4Ciwi\nIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeDEFFjPrY2afm1mumd1dzvSaZvZSePoCM2sZbm9oZvPM\nbLuZPV5qngwz+yQ8z6NmZuH2Bmb2lpl9Ef63/sFvpoiIiBzJKg0sZlYNeALoC7QHrjSz9qW6XQ9s\ncfc2wMPA6HD7buAeYHg5ix4P/BxoG370CbffDbzt7m2Bt8OvRURE5BhWPYY+XYFcd18BYGYvApcA\nn5bocwmQE34+HXjczMzddwDvmVmbkgs0s+ZAXXefH379HHApMCe8rO7hrlOAfwB37e+GHYj7Zi3l\no682ULPm6qpYXWDt2bPnmK8BqA6gGoBqAKpBMdUBTqybwJgrU+Oy7lgCSwug5DuUB3TbVx93LzSz\nrUBDYGMFy8wrtcwW4edN3T0//Hwd0LT0zPn5+RQVFcUw9P2zfft23J09e/Yc8mUfSVSDENVBNQDV\nAFSDYqoD7C2qSV5eXuUdD0BqasVBKJbAEjfu7mbmpdubN29+WNY35spU8vLyKi3a0U41CFEdVANQ\nDUA1KKY6xLcGsZx0uwY4ocTr1HBbuX3MrDpQD9hUyTJLbnHJZX4TPmRUfOhofQxjFBERkaNYLIFl\nEdDWzNLNLBEYCMws1WcmMCj8vD/wjruX2TNSLHzIZ5uZnRW+Ouga4LVyljWoRLuIiIgcoyo9JBQ+\nJ2Uo8HegGvCMuy81s1HAYnefCUwC/mJmucBmQqEGADNbCdQFEs3sUuAid/8UuBmYDNQidLLtnPAs\nDwIvm9n1wCrgikOxoSIiInLkiukcFnd/HXi9VNu9JZ7vBgbsY96W+2hfDHQsp30T0COWcYmIiMix\nQXe6FRERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHA\nU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBT\nYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNg\nERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2AR\nERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBEREZHAU2ARERGRwFNgERERkcBTYBER\nEZHAiymwmFkfM/vczHLN7O5yptc0s5fC0xeYWcsS034Vbv/czHqXaL/NzJaY2VIzu71E++lmNt/M\n/m1mi82s68FtooiIiBzpKg0sZlYNeALoC7QHrjSz9qW6XQ9scfc2wMPA6PC87YGBQAegD/BnM6tm\nZh2BnwNdgdOAi82sTXhZDwH3ufvpwL3h1yIiInIMi2UPS1cg191XuPv3wIvAJaX6XAJMCT+fDvQw\nMwu3v+jue9z9KyA3vLxTgAXuvtPdC4F/ApeF53egbvh5PWDtgW2aiIiIHC2qx9CnBbC6xOs8oNu+\n+rh7oZltBRqG2+eXmrcFsAR4wMwaAruAHwKLw31uB/5uZmMJBapzSg8oPz+foqKiGIa+/woKCsjL\nyzssyz5SqAYhqoNqAKoBqAbFVIfDW4PU1NQKp8cSWA45d//MzEYDbwI7gH8DxQnkJmCYu//VzK4A\nJgE9S87fvHnzwza2vLy8Sot2tFMNQlQH1QBUA1ANiqkO8a1BLIeE1gAnlHidGm4rt4+ZVSd0KGdT\nRfO6+yR3z3D384EtwPJwn0HA/4Sfv0LoEJKIiIgcw2IJLIuAtmaWbmaJhE6inVmqz0xCQQOgP/CO\nu3u4fWD4KqJ0oC2wEMDMmoT/PZHQ+SvTwvOvBTLDzy8EvjiQDRMREZGjR6WHhMLnpAwF/g5UA55x\n96VmNgpY7O4zCR22+YuZ5QKbCYUawv1eBj4FCoFfuHvxoZ+/hs9hKQi3fxtu/znwSHhPzW5gyKHa\nWBERETkyxXQOi7u/Drxequ3eEs93AwP2Me8DwAPltJ+3j/7vARmxjEtERESODbrTrYiIiASeAouI\niIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iI\niASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiI\nBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgE\nngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiASe\nAouIiIgEngKLiIiIBJ4Ci4iIiASeAouIiIgEngKLiIiIBJ4Ci4iIiAReTIHFzPqY2edmlmtmd5cz\nvaaZvRSevsDMWpaY9qtw++dm1rtE+21mtsTMlprZ7aWWd4uZLQtPe+jAN09ERESOBtUr62Bm1YAn\ngF5AHrDIzGa6+6clul0PbHH3NmY2EBgN/NjM2gMDgQ7A8cBcM2sHnAL8HOgKfA+8YWaz3T3XzC4A\nLgFOc/c9ZtbkkG2tiIiIHJFi2cPSFch19xXu/j3wIqFAUdIlwJTw8+lADzOzcPuL7r7H3b8CcsPL\nOwVY4O473b0Q+CdwWXj+m4AH3X0PgLuvP/DNExERkaNBpXtYgBbA6hKv84Bu++rj7oVmthVoGG6f\nX2reFsAS4AEzawjsAn4ILA73aQecZ2YPALuB4e6+qOTK8vPzKSoqimHo+6+goIC8vLzDsuwjhWoQ\nojqoBqAagGpQTHU4vDVITU2tcHosgeWQc/fPzGw08CawA/g3UJxAqgMNgLOALsDLZtbK3b14/ubN\nmx+2seXl5VVatKOdahCiOqgGoBqAalBMdYhvDWI5JLQGOKHE69RwW7l9zKw6UA/YVNG87j7J3TPc\n/XxgC7A83CcP+B8PWQjsBRrtz0aJiIjI0SWWwLIIaGtm6WaWSOgk2pml+swEBoWf9wfeCe8RmQkM\nDF9FlA60BRYCFJ9Ma2YnEjp/ZVp4/leBC8LT2gGJwMYD2zwRERE5GlR6SCh8TspQ4O9ANeAZd19q\nZqOAxe4+E5gE/MXMcoHNhEIN4X4vA58ChcAv3L340M9fw+ewFITbvw23PwM8Y2ZLCF1BNKjk4SAR\nERE59sR0Dou7vw68Xqrt3hLPdwMD9jHvA8AD5bSft4/+3wNXxzIuEREROTboTrciIiISeAosIiIi\nEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiIS\neAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4\nCiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeAosIiIiEngK\nLCIiIhJ4CiwiIiISeAosIiIiEngKLCIiIhJ4CiwiIiISeObu8R6DiIiISIW0h0VEREQCT4FFRERE\nAk+BRURERAJPgaUEM+tjZp+bWa6Z3R3v8VQ1M3vGzNab2ZJ4jyVezOwEM5tnZp+a2VIzuy3eY4oH\nM0sys4Vm9p9wHe6L95jiwcyqmdlHZjY73mOJFzNbaWafmNm/zWxxvMcTD2Z2nJlNN7NlZvaZmZ0d\n7zFVJTM7Kfz+Fz+2mdntVT4OnXQbYmbVgOVALyAPWARc6e6fxnVgVcjMzge2A8+5e8d4jycezKw5\n0Nzd/2VmdYAPgUuPpc8BgJkZkOLu282sBvAecJu7z4/z0KqUmf0S6AzUdfeL4z2eeDCzlUBnd98Y\n77HEi5lNAd5196fNLBFIdvdv4z2ueAj/rlwDdHP3VVW5bu1h+a+uQK67r3D374EXgUviPKYq5e7/\nC2yO9zjiyd3z3f1f4effAZ8BLeI7qqrnIdvDL2uEH8fUXzdmlgpkAU/HeywSP2ZWDzgfmATg7t8f\nq2ElrAfwZVWHFVBgKakFsLrE6zyOwV9U8l9m1hI4A1gQ35HER/hwyL+B9cBb7n6s1eFPwAhgb7wH\nEmcOvGlmH5rZkHgPJg7SgQ3As+HDg0+bWUq8BxVHA4EX4rFiBRaRcphZbeCvwO3uvi3e44kHdy9y\n99OBVKCrmR0zhwnN7GJgvbt/GO+xBMAP3P1MoC/wi/Ch42NJdeBMYLy7nwHsAI65cxwBwofDfgS8\nEo/1K7D81xrghBKvU8NtcowJn7PxV2Cqu/9PvMcTb+Hd3/OAPvEeSxU6F/hR+PyNF4ELzez5+A4p\nPtx9Tfjf9cAMQofPjyV5QF6JPYzTCQWYY1Ff4F/u/k08Vq7A8l+LgLZmlh5OkQOBmXEek1Sx8Mmm\nk4DP3P2P8R5PvJhZYzM7Lvy8FqGT0ZfFd1RVx91/5e6p7t6S0M+Cd9z96jgPq8qZWUr45HPCh0Eu\nAo6pqwjdfR2w2sxOCjf1AI6pk/BLuJI4HQ6C0K4uAdy90MyGAn8HqgHPuPvSOA+rSpnZC0B3oJGZ\n5QEj3X1SfEdV5c4Ffgp8Ej5/A+DX7v56HMcUD82BKeErAhKAl939mL209xjWFJgRyvFUB6a5+xvx\nHVJc3AJMDf8xuwK4Ns7jqXLhwNoLuCFuY9BlzSIiIhJ0OiQkIiIigafAIiIiIoGnwCIiIiKBp8Ai\nIiIigafAIiIiIoGnwCIiIiKBp8AiIiIigafAIiIiIoH3/397o5Rs9IA8AAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 648x360 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sx7jowlUqhfu",
        "colab_type": "text"
      },
      "source": [
        "You can re-execute this cell to continue training"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UM0AIbCSfg9V",
        "colab_type": "code",
        "cellView": "both",
        "colab": {}
      },
      "source": [
        "# You can re-execute this cell to continue training\n",
        "\n",
        "steps_per_epoch = (DATA_LEN-1) // SEQLEN // BATCHSIZE\n",
        "#generator = rnn_minibatch_sequencer(data, BATCHSIZE, SEQLEN, NB_EPOCHS)\n",
        "generator = dumb_minibatch_sequencer(data, BATCHSIZE, SEQLEN, NB_EPOCHS)\n",
        "full_history = LossHistory()\n",
        "history = model.fit_generator(generator,\n",
        "                              steps_per_epoch=steps_per_epoch,\n",
        "                              epochs=NB_EPOCHS,\n",
        "                              callbacks=[full_history, lr_decay])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "u_TxVHXPfg9Y",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "display_loss(history.history, full_history.history, NB_EPOCHS)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xBmt2uUVfg9N",
        "colab_type": "text"
      },
      "source": [
        "## Inference\n",
        "This is a generative model: run one trained RNN cell in a loop"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UFalPiNOr2pt",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Inference from stateful model\n",
        "def keras_prediction_run(model, prime_data, run_length):\n",
        "  model.reset_states()\n",
        "  \n",
        "  data_len = prime_data.shape[0]\n",
        "  \n",
        "  #prime_data = np.expand_dims(prime_data, axis=0) # single batch with everything\n",
        "  prime_data = np.expand_dims(prime_data, axis=-1) # each sequence is of size 1\n",
        "  \n",
        "  # prime the state from data\n",
        "  for i in range(data_len - 1): # keep last sample to serve as the input sequence for predictions\n",
        "    model.predict(np.expand_dims(prime_data[i], axis=0))\n",
        "  \n",
        "  # prediction run\n",
        "  results = []\n",
        "  Yout = prime_data[-1] # start predicting from the last element of the prime_data sequence\n",
        "  for i in range(run_length+1):\n",
        "    Yout = model.predict(Yout)\n",
        "    results.append(Yout[0,0]) # Yout shape is [1,1] i.e one sequence of one element\n",
        "\n",
        "  return np.array(results)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DBVi1tNofg9a",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "PRIMELEN=256\n",
        "RUNLEN=512\n",
        "OFFSET=20\n",
        "RMSELEN=128\n",
        "\n",
        "prime_data = data[OFFSET:OFFSET+PRIMELEN]\n",
        "\n",
        "# For inference, we need a single RNN cell (no unrolling)\n",
        "# Create a new model that takes a single sequence of a single value (i.e. just one RNN cell)\n",
        "inference_model = keras_model(1, 1)\n",
        "# Copy the trained weights into it\n",
        "inference_model.set_weights(model.get_weights())\n",
        "\n",
        "results = keras_prediction_run(inference_model, prime_data, RUNLEN)\n",
        "\n",
        "picture_this_8(data, prime_data, results, OFFSET, PRIMELEN, RUNLEN, RMSELEN)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AQn6WA-pfg9c",
        "colab_type": "text"
      },
      "source": [
        "Copyright 2019 Google LLC\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "you may not use this file except in compliance with the License.\n",
        "You may obtain a copy of the License at\n",
        "[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)\n",
        "Unless required by applicable law or agreed to in writing, software\n",
        "distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "See the License for the specific language governing permissions and\n",
        "limitations under the License."
      ]
    }
  ]
}